#pragma once

// ZEN_GET_SET_REF
#define ZEN_GET_SET_REF(Type, mName, GetName, SetName) \
public:                                                \
	Type const& GetName() const                        \
	{                                                  \
		return mName;                                  \
	}                                                  \
                                                       \
public:                                                \
	Type& GetName()                                    \
	{                                                  \
		return mName;                                  \
	}                                                  \
                                                       \
public:                                                \
	void SetName(Type const& v)                        \
	{                                                  \
		this->mName = v;                               \
	}                                                  \
                                                       \
protected:                                             \
	Type mName

// ZEN_GET_SET_COPY
#define ZEN_GET_SET_COPY(Type, mName, GetName, SetName) \
public:                                                 \
	Type GetName() const                                \
	{                                                   \
		return mName;                                   \
	}                                                   \
                                                        \
public:                                                 \
	void SetName(Type v)                                \
	{                                                   \
		this->mName = v;                                \
	}                                                   \
                                                        \
protected:                                              \
	Type mName

// ZEN_GET_REF
#define ZEN_GET_REF(Type, mName, GetName) \
public:                                   \
	Type const& GetName() const           \
	{                                     \
		return mName;                     \
	}                                     \
                                          \
protected:                                \
	Type mName

// ZEN_GET_COPY
#define ZEN_GET_COPY(Type, mName, GetName) \
public:                                    \
	Type GetName() const                   \
	{                                      \
		return mName;                      \
	}                                      \
                                           \
protected:                                 \
	Type mName
